![AWS再入門 Amazon Elastic File System編](https://devio2023-media.developers.io/wp-content/uploads/2019/05/amazon-efs.png)
AWS再入門 Amazon Elastic File System編
こんにちは、中川です。
当エントリは Developers.IO で弊社コンサルティング部による『AWS 再入門ブログリレー 2019』の 18 日目のエントリです。
昨日はちゃだいんの「AWS再入門ブログリレー AWS WAF編」でした。
このブログリレーの企画は、普段 AWS サービスについて最新のネタ・深い/細かいテーマを主に書き連ねてきたメンバーの手によって、 今一度初心に返って、基本的な部分を見つめ直してみよう、解説してみようというコンセプトが含まれています。
AWS をこれから学ぼう!という方にとっては文字通りの入門記事として、またすでに AWS を活用されている方にとっても AWS サービスの再発見や 2019 年のサービスアップデートのキャッチアップの場となればと考えておりますので、ぜひ最後までお付合い頂ければ幸いです。
では、さっそくいってみましょう。18 日目のテーマは『Amazon Elastic File System 編』です。
Amazon Elastic File Systemとは
概要
Amazon Elastic File System(以下、Amazon EFS)は、シンプルで、スケラーブル、伸縮自在なフルマネージドな共有ストレージサービスです。Amazon EC2 やオンプレミスリソースから使用できます。NFS バージョン 4.0 または 4.1 使用して、VPC 上に作成した Amazon EFS ファイルシステムをマウントし、共通データの読み書きを可能にします。
なお、執筆時点(2019/07/25)において、Amazon EFS で Windows はサポートされておりませんので、ご注意ください。
仕組み
Amazon EFS を EC2 で利用する場合の構成について見ていきます。
Amazon EFS は VPC に対してファイルシステムを作成し、AZ にマウントターゲットを作成します。マウントターゲットは、NFS のエンドポイントとなる IP アドレスを用意します。AZ 内の各インスタンスは、DNS 名を使用してファイルシステムをマウントしようとすると、所属する AZ のマウントターゲットの IP アドレスが解決されて、ファイルシステムを使用できるようになります。
また、オンプレや他の VPC からの接続(VPC Peering、Transit Gateway 経由)もサポートされております。利用する際は、マウントターゲットの IP アドレスを直接指定して、ファイルシステムをマウントします。
ユースケース
Amazon EFS の主なユースケースは以下になります。低レイテンシーかつ高スループットで共通データへのアクセスが求められる要件で使用されます。
- パッケージアプリの共有ディレクトリ
- コンテンツの共有リポジトリ
- ビッグデータ分析
- メディア処理
- コンテナインスタンスで使用するストレージ
特徴
伸縮自在でスケーラブル
Amazon EFS は、ファイルの追加/削除に合わせて、自動でストレージ容量が拡張/縮小されます。1 つのファイルシステムあたりペタバイトまで保存できます。事前見積もりが不要で使用分だけの課金となります。
高耐久で高可用性
複数の AZ で冗長化されているので高い耐久性があります。
複数の AZ から同時書き込みがサポートされており、書き込み完了直後には、他でも反映されている強力な書き込み後の読み取り整合性があります。
パフォーマンス
Amazon EFS は、複数のストレージサーバーに分散されており、複数の EC2 から同時に数千もの並列アクセスがあっても処理できるスケーラビリティをもっています。
また、Amazon EFS では、パフォーマンスモードやスループットモードといった機能があり、個々のシステム要件に合わせてパフォーマンスを設定できます。これらのモードの詳細については、後述します。
他のストレージサービスとの比較
AWS 他ののストレージサービスと比較は Blackbelt のスライドが参考になります。
20180704 AWS Black Belt Online Seminar Amazon Elastic File System (Amazon EFS) 2018/8/9 updateより抜粋
チュートリアル
再入門ということで、以下のようなシンプルな構成で EFS を EC2 にマウントする手順を行います。
前提として 2 つの EC2 が、異なる AZ 上で起動していることとします。今回は、Amazon Linux 2 を使用しました。
1. セキュリティグループを作成
EFS に設定するセキュリティグループを設定します。EFS には、EC2 のセキュリティグループから NFS(TCP の 2049 番ポート)を許可するルールを追加します。
2. Amazon EFSファイルシステムを作成
サービス一覧から[EFS]を選択し、[ファイルシステムの作成]をクリックします。
ファイルシステムの設定でVPCを選択し、マウントターゲットでサブネットと 1.で作成したセキュリティグループを設定します。設定したら[次のステップ]をクリックします。
オプションはとくに設定せず、[次のステップ]をクリックします。スループットモードやパフォーマンスモードを変更する場合は、ここで変更します。
作成するファイルシステムの内容を確認し、[ファイルシステムの作成]をクリック。
3. Amazon EFSファイルシステムをマウント
EC2 に接続し、Amazon EFS マウントヘルパーのあるamazon-efs-utils
パッケージをインストールします。amazon-efs-utils
は、EFS のマウントを簡素化し、転送データを TLS で暗号化できるツールです。使用しているディストリビューションがamazon-efs-utils
でサポートされているかの確認は、こちらからできます。
$ sudo yum -y install amazon-efs-utils
マウントポイントとなるディレクトリ(/mnt/efs)を作成し、mount
コマンドを実行して EFS ファイルシステムをマウントします。fs-xxxxx
には、作成したファイルシステムのファイルシステムIDを入力します。
$ sudo mkdir /mnt/efs
$ sudo mount -t efs fs-xxxxx:/ /mnt/efs
df -h
コマンドを実行してで、EFS ファイルシステムがマウントされていることを確認できました。
$ df -h
ファイルシス サイズ 使用 残り 使用% マウント位置
devtmpfs 462M 0 462M 0% /dev
tmpfs 479M 0 479M 0% /dev/shm
tmpfs 479M 368K 479M 1% /run
tmpfs 479M 0 479M 0% /sys/fs/cgroup
/dev/nvme0n1p1 8.0G 1.2G 6.8G 15% /
tmpfs 96M 0 96M 0% /run/user/1000
fs-6efd9e4f.efs.ap-northeast-1.amazonaws.com:/ 8.0E 0 8.0E 0% /mnt/efs
再起動後にも自動でマウントされるようにするには、/etc/fstab
に以下の 1 行を追加します。
[shell gutter="false"]
fs-xxxxx:/ /mnt/efs efs defaults,_netdev 0 0
[/shell]
以上で EC2 の設定は完了です。今回は、ファイルが共有ストレージで両方から見えることを確認するため、もう 1 つの EC2 にも同様の設定をします。
4. 動作確認
片方の EC2 を EC2-A、もう片方の EC2 を EC2-B とします。EC2-A で共有ディレクトリにファイルを作成します。
$ cd /mnt/efs
$ sudo touch start-file.txt
EC2-B で共有ディレクトリを表示すると、ファイルが作成されていることを確認できました。
$ cd /mnt/efs
$ ls /mtn/efs
start-file.txt
その他の機能など
パフォーマンスモード
Amazon EFS では、2 つのパフォーマンスモードが用意されています。
汎用パフォーマンスモードは、ほとんどのファイルシステムに適した汎用的なモードです。ファイルシステム作成時にデフォルトで選択されます。
最大I/Oパフォーマンスモードは、大規模なスケールアウトが求められるケースで使用するモードです。汎用モードに比べてファイル操作のレイテンシーが長くなりますが、全体的なスループットと 1 秒あたりのオペレーションをスケールします。利用時に追加費用は発生しません。
モード選択の指標には、CloudWatch メトリクスのPercentIOLimitが便利で、汎用モードにおいて I/O 性能が制限に達しているか確認できます。PercentIOLimit が 100%に近い場合は、最大 I/O パフォーマンスモードを検討します。パフォーマンスモードは、ファイルシステムを作成後に変更できない制限がありますので、モード変更が必要な際はファイルシステムを再作成しなくてはなりません。
ストレージクラスとライフサイクル管理
Amazon EFS では、2 つのストレージクラスが用意されてファイルごとに適用されます。
スタンダードストレージクラスは、頻繁にアクセスされるファイルを格納するために使用されます。
低頻度アクセス(IA)ストレージクラスは、アクセス頻度が低いファイルを格納するための安価なストレージです。ライフサイクル管理を有効にすることで、一定期間アクセスされなかったファイルは、自動的に IA ストレージへ移行されます。ストレージ料金としては、最大85%節約することができるのですが、IA ストレージのファイルへのアクセス発生時には、別途、低頻度アクセスリクエストの料金がかかるので注意しましょう。
スループットモード
Amazon EFS では、2 つのスループットモードが用意されています。
バーストモードは、スタンダードストレージクラスに保存されているファイルサイズによって、ベースとなるスループットが決まります。ベース以上のスループット時(バースト時)は、バーストクレジットが消費されます。バーストクレジットは、スループットがベースラインを下回るときに蓄積されるもので、ちょうど EC2 インスタンスタイプの T シリーズにおける CPU クレジットと似ています。
バーストモードのスループット例は、以下の表になります。
ファイルシステムのサイズにかかわらず、バースト時のスループットで100MB/秒が保証されています。
プロビジョニングモードでは、保存されたデータサイズにかかわらず一貫したスループットを使用できます。ただし、プロビジョニングモードを使用時は、プロビジョニングしたスループットから標準で含まれているスループット分を引いた分が課金対象となります。
例として、1 か月間にわたり 20GB を保存し 5MB/秒のスループットをプロビジョニングしたとします。20GB には 1MB/秒のスループットが標準で含まれているので、5MB から 1MB を引いた 4MB/秒が課金対象になります。
スループットモードの違いについては、以下の Blackbelt 資料が参考になります。
20180704 AWS Black Belt Online Seminar Amazon Elastic File System (Amazon EFS) 2018/8/9 update
データ移行
AWS DataSyncを使用することで、オンプレミスや既存クラウド内のファイルシステムからAWS EFSにデータを移行できます。
AWS DataSync は以下の手順で利用できます。
- エージェントをデプロイし、アクティブ化
- 送信元と宛先の場所を作成して設定
- タスクを作成
- タスクを実行して、送信元から宛先までファイルを転送
オンプレミスからの移行では VMware 環境にエージェントをデプロイし、既存クラウド内のデータ移行では EC2 インスタンスにエージェントをデプロイします。手順の詳細については、AWS DataSync のドキュメント「AWS DataSyncの開始方法」をご参照ください。
バックアップ
AWS Backupを使用することで、Amazon EFS ファイルシステムをシンプルにバックアップできます。(AWS Backup のリリース以前にはEFS-to-EFSというソリューションを使用できましたが、手間とコストがかかっていました)
Amazon EFS は複数の AZ で冗長化されていますが、意図しないところでの変更や削除に対応するには、別途バックアップの仕組みが必要になります。
AWS Backup を使用したバックアップ手順については、下記ブログをご参考ください。
料金
Amazon EFS の料金は、使用したファイルストレージ容量に対して発生します。低頻度アクセスストレージを使用時は、標準ストレージよりもストレージ利用料を抑えることができますが、アクセスリクエストごとに追加で利用料が発生しますので、注意しましょう。
利用形態 | 料金 |
---|---|
標準ストレージ (GB-月) | 0.36USD |
低頻度アクセスストレージ (GB-月) | 0.054USD |
低頻度アクセスリクエスト (転送GBあたり) | 0.012USD |
プロビジョニングするスループット (MB/秒-月) | 7.2USD |
上記は執筆時点(2019/07/25)における東京リージョンの料金になります。最新の料金は、以下の公式サイトをご確認ください。
Amazon EFS の料金
さいごに
以上、AWS 再入門ブログリレー 18 日目のエントリ『AWS Elastic File System』編でした。
Amazon EFS は 2016 年に GA しておりましたが、2018 年 7 月まで東京リージョンで利用できませんでした。また、バックアップ機能がなかった EFS ですが、今年の 1 月に登場した AWS Backup でバックアップができるようになり、また、東京リージョンでも今月から AWS Backup を利用できるようになりました。日本のユーザーにとって、Amazon EFS の機能が増え使いやすくなったので、これから Amazon EFS のユースケースが増えてくるのではないかと期待しています。本エントリが、Amazon EFS の利用を検討している方の第 1 歩になれば幸いです。
明日(7/26)は金の「AWS AppSync 編」です。お楽しみに!!